#include <iostream>
#include <vector>
#include <string>

using namespace std;

class Cheeky {
public:
    Cheeky(string s) {
        seq = s;
        size = (int) seq.size();
    }
    
    int period() {
        vector<int> prefixFunction(size);
        prefixFunction[0] = 0; //начальное условие для префикс функции. При k = 0 prefix(s, i + 1) = 0 (В данном случае prefix(s, 0) = 0)
        int k = 0;
        
        for (int i = 1; i < size; i++) { //подсчет префикс-функции с проверкой требуемого условия
            while ((k > 0) && (seq[k] != seq[i]))
                k = prefixFunction[k - 1]; //если s[i] != s[k], то k = prefix(s, k)
            if (seq[k] == seq[i]) //если s[k] == s[i] то prefix(s, k) = prefix(s, i)
                k++;
            prefixFunction[i] = k;
            if (prefixFunction[i] * 2 == i + 1 && prefixFunction[i] * 3 > seq.size()) //проверяем что мы обнаружили нужный период(т.е. что 3 периода уже не влазят в строку)
                return prefixFunction[i];
        }
        return prefixFunction[size - 1];
    }
    
    string solution() {
        string answer;
        int periodSize = this->period();
        for (int j = 0; j < 8; j++)
            answer += seq[(size + j) % periodSize];
        answer += "...";
        return answer;
    }
private:
    string seq;
    int size;
};